/**
 * 
 */
package kr.pe.johnkim.dayve.activity;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONException;

import kr.pe.johnkim.dayve.provider.DayveCategory;
import kr.pe.johnkim.dayve.provider.DayveCategoryDatabaseHandler;
import kr.pe.johnkim.dayve.provider.DayveFavoriteDatabaseHandler;
import kr.pe.johnkim.dayve.provider.DayveGroup;
import kr.pe.johnkim.dayve.provider.DayveGroupAdapter;
import kr.pe.johnkim.dayve.provider.DayveGroupDatabaseHandler;
import kr.pe.johnkim.dayve.provider.DayveItem;
import kr.pe.johnkim.dayve.provider.DayveItemDatabaseHandler;
import kr.pe.johnkim.dayve.provider.DayveItemEvent;
import kr.pe.johnkim.dayve.provider.DayveItemEventDatabaseHandler;
import kr.pe.johnkim.dayve.provider.DayveLog;
import kr.pe.johnkim.dayve.rest.DayveCategoryRest;
import kr.pe.johnkim.dayve.rest.DayveCommonRest;
import kr.pe.johnkim.dayve.rest.DayveGroupRest;
import kr.pe.johnkim.dayve.rest.DayveItemEventRest;
import kr.pe.johnkim.dayve.rest.DayveItemRest;
import kr.pe.johnkim.dayve.util.DayveCommon;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.TabActivity;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AbsListView.OnScrollListener;

/**
 * My History Group 목록을 출력하는 클래스이다.
 * 
 * Dayve 에 로그인을 하면 나타나는 메인 화면이다.
 * 
 * 설치 후 최초 실행시에 Server 로 부터 Group, Category, Item 목록을 한번에 같이 내려 받는다.
 * 
 * @author johnkim
 *
 */
public class DayveGroupView extends Activity implements OnScrollListener {

	public static String TAG = DayveGroupView.class.getSimpleName();
	
//	LinearLayout linearLayoutGroupFook;
	
	ProgressBar groupProgressBar;
	
	private DayveGroupAdapter dayveGroupAdapter;
	
	// 화면 출력용 사용자 id.
	TextView txtViewGroupUserId;
	
	// Group Notification.
	TextView txtViewGroupNotification;
	
	// Group 생성 화면 이동 버튼.
	TextView txtViewShowRegisterGroupView;
	
	// Group Explain.
	ImageView imgViewGroupExplain;
	
	// Group Refresh
	ImageView imgViewGroupRefresh;
	
	// Preference.
	ImageView imgViewGroupPreference;
	
	// Show Register Group View.
	ImageView imgViewShowRegisterGroupView;
	
	// 데이터 저장용 group 목록
	private ArrayList<DayveGroup> groupList;
	
	// 화면 출력용 group 목록
	private ArrayList<DayveGroup> groupViewList;
	
	// 현재 시간.
	private String currentDate;
	
	DayveGroupRest dayveGroupRest = new DayveGroupRest();
	DayveCategoryRest dayveCategoryRest = new DayveCategoryRest();
	DayveItemRest dayveItemRest = new DayveItemRest();
	DayveItemEventRest dayveItemEventRest = new DayveItemEventRest();
	DayveCommonRest dayveCommonRest = new DayveCommonRest();
	DayveCommon dayveCommon = new DayveCommon();

	// 사용자 아이디.
	private String DAYVE_ID = "";

	// 목록 요청 갯수의 합.
	private int groupStart = 0;
	
	// 한번에 가져올 목록의 category 의 갯수.
	private int groupCount = 20;

	// 목록 요청 횟수의 합.
	private int requestCount = 0;

	// 첫 실행을 위한 로직을 처리 한다.
	private static final int THREAD_FIRST_EXECUTE = 100;
	
	// 프로그레스 바를 출력 한다.
	private static final int THREAD_PROGRESS_BAR_VISIBLE = 101;
	
	// 프로그레스 바를 감춘다.
	private static final int THREAD_PROGRESS_BAR_INVISIBLE = 102;
	
	// Group 목록을 가져 와서 출력 한다.
	private static final int THREAD_GROUP_LIST = 103;
	
	// Group 목록을 업데이트 한다.
	private static final int THREAD_GROUP_LIST_REFRESH = 104;
	
	// Group 목록을 더 가져 온다.
	private static final int THREAD_GROUP_LIST_MORE = 105;
	
	// Group 목록 가져오기에 성공하면 toast 를 띄운다.
	private static final int THREAD_GROUP_LIST_SUCCESS = 106;
	
	// Group 목록 가져오기에 실패하면 dialog 창을 띄운다.
	private static final int THREAD_GROUP_LIST_FAIL = 107;
	
	// 프로그램을 종료 한다.
	private static final int ALERT_DIALOG_EXIT_ID = 108;
	
	// Category 목록을 업데이트 한다.
	private static final int THREAD_CATEGORY_LIST_FOR_GROUP_REFRESH = 109;
	
	// Item 목록을 업데이트 한다.
	private static final int THREAD_ITEM_LIST_FOR_CATEGORY_REFRESH = 110;
	
	// Item Event 목록을 업데이트 한다.
	private static final int THREAD_ITEM_EVENT_LIST_REFRESH = 111;
	
	// Favorite 목록을 업데이트 한다.
	private static final int THREAD_FAVORITE_LIST_FOR_GROUP_REFRESH = 112;
	
	// Refresh 버튼을 출력 한다.
	private static final int THREAD_REFRESH_BUTTON_APPEAR = 113;
	
	// Refresh 버튼을 감춘다.
	private static final int THREAD_REFRESH_BUTTON_DISAPPEAR = 114;

	// DatabaseHandler
//	private DatabaseHandler dbHandler;
	
	// Group DatabaseHandler
	private DayveGroupDatabaseHandler groupDatabaseHaneler;
	
	// Category DatabaesHandler
	private DayveCategoryDatabaseHandler categoryDatabaseHandler;
	
	// Item DatabaseHandler
	private DayveItemDatabaseHandler itemDatabaseHandler;
	
	// Item Event DatabaseHandler
	private DayveItemEventDatabaseHandler itemEventDatabaseHandler;
	
	// Favorite DatabaseHandler
	private DayveFavoriteDatabaseHandler favoriteDatabaseHandler;

	// 화면 잠금.
	private boolean mLockListView = false;

	// Cursor Where Query
	private static final String WHERE_GROUP = "";
	
	// Group 등록 결과.
	public static String RESULT_GROUP_REGISTER = "";
	
	// Group 삭제 결과.
	public static String RESULT_GROUP_DELETE = "";
	
	// Application 실행 횟수.
	private int DAYVE_EXECUTE_COUNT = 0;
	
	public static String GROUP_MODE = "";
	
	// 설치 뒤 데이터 초기 다운로드 결과.
	public static String INSTALL_STATUS = "";
	
	// 설치 뒤 최초 초기 데이터 다우로드 결과.
	public static String DOWNLOAD_GROUP_INITIAL_DATA = "";
	public static String DOWNLOAD_CATEGORY_INITIAL_DATA = "";
	public static String DOWNLOAD_ITEM_INITIAL_DATA = "";
	public static String DOWNLOAD_ITEM_EVENT_INITIAL_DATA = "";
	public static String DOWNLOAD_FAVORITE_INITIAL_DATA = "";

	/* (non-Javadoc)
	 * @see android.app.Activity#onCreate(android.os.Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.dayve_group);
		
		Log.i(TAG, "onCreate");
		
		// SharedPreferences 정보를 확인 한다.
		confirmNotification();
		
		groupProgressBar = (ProgressBar)findViewById(R.id.groupProgressBar);
		
		// Group Notification.
		txtViewGroupNotification = (TextView)findViewById(R.id.txtViewGroupNotification);
		txtViewGroupNotification.setVisibility(View.INVISIBLE);
		
		// 현재 시간을 가져 온다.
		currentDate = dayveCommon.getCurrentDate();

		// TabActivity 를 가져 와서 TabHost 에 세팅 한다.
//		TabActivity parentTabActivity = (TabActivity)getParent();
//		final TabHost tabHost = parentTabActivity.getTabHost();
		
//		linearLayoutGroupFook = (LinearLayout)findViewById(R.id.linearLayoutGroupFood);
//		
//		// 음식 그룹을 터치하면 음식 카테고리 탭 화면으로 이동 한다.
//		linearLayoutGroupFook.setOnClickListener(new OnClickListener() {
//			
//			public void onClick(View v) {
//				// TODO Auto-generated method stub
//				DayveCategoryView.DAYVE_GROUP_NAME = "FOOD";
//				tabHost.setCurrentTab(1);
//			}
//		});
		
		
		
		// 화면 출력용 사용자 id 를 정의 한다.
//		txtViewGroupUserId = (TextView)findViewById(R.id.txtViewGroupUserId);
//		txtViewGroupUserId.setText(DAYVE_ID);
		
		// Group 생성 화면 이동 버튼을 정의 한다.
//		txtViewShowRegisterGroupView = (TextView)findViewById(R.id.txtViewShowRegisterGroupView);
//		txtViewShowRegisterGroupView.setOnClickListener(new View.OnClickListener() {
//
//			public void onClick(View arg0) {
//				// TODO Auto-generated method stub
//				Intent i = new Intent(DayveGroupView.this, DayveGroupRegisterView.class);
//				startActivityForResult(i, 0);
//			}
//			
//		});
		
		/**
		 * Group Back 버튼을 생성하고 정의 한다.
		 */
		imgViewGroupExplain = (ImageView)findViewById(R.id.imgViewGroupExplain);
		imgViewGroupExplain.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i = new Intent(DayveGroupView.this, DayveGroupExplainView.class);
				startActivity(i);
			}
			
		});
		
		
		/**
		 * Refresh 버튼을 터치 한다.
		 * 먼저 프로그레스 바를 출력한 뒤 refresh thread 를 시작 한다.
		 */
		imgViewGroupRefresh = (ImageView)findViewById(R.id.imgViewGroupRefresh);
		
		imgViewGroupRefresh.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				GROUP_MODE = "PROGESS";
				
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST_REFRESH));
			}
			
		});
		
		/**
		 * Group Preference 버튼을 생성하고 정의 한다.
		 */
		imgViewGroupPreference = (ImageView)findViewById(R.id.imgViewGroupPreference);
		imgViewGroupPreference.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i = new Intent(DayveGroupView.this, DayvePreferenceView.class);
				startActivity(i);
			}
			
		});
		
		imgViewShowRegisterGroupView = (ImageView)findViewById(R.id.imgViewShowRegisterGroupView);
		imgViewShowRegisterGroupView.setOnClickListener(new View.OnClickListener() {

			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent i = new Intent(DayveGroupView.this, DayveGroupRegisterView.class);
				startActivityForResult(i, 0);
			}
			
		});
		
		
		// 화면에 출력하기 위한 리스트 생성.
		groupViewList = new ArrayList<DayveGroup>();
		
		// Group 어댑터 생성.
		dayveGroupAdapter = new DayveGroupAdapter(getApplicationContext(), groupViewList);
		
		
		GridView gridView = (GridView)findViewById(R.id.gridViewGroupList);
		
		// Grid view 의 cursor 를 제공하기 위해서 어댑터를 세팅 한다.(?)
		gridView.setAdapter(dayveGroupAdapter);
		
		gridView.setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long id) {
				// TODO Auto-generated method stub
//				showGridToast(position);
				
				/**
				 * Group 이름으로 Category 화면을 연다.
				 */
//				DayveCategoryView.DAYVE_GROUP_NAME = groupViewList.get(position).getName();
//				tabHost.setCurrentTab(1);
				
				if(("").equals(GROUP_MODE)) {
					Intent i = new Intent(DayveGroupView.this, DayveGroupInformationView.class);
					
					i.putExtra("groupId", groupViewList.get(position).getIdMyHistoryGroups());
					i.putExtra("groupName", groupViewList.get(position).getName());
					i.putExtra("groupComment", groupViewList.get(position).getComment());
					i.putExtra("groupIconUrl", groupViewList.get(position).getIconUrl());
					i.putExtra("groupOpenGroupYn", groupViewList.get(position).getOpenGroupYn());
					i.putExtra("groupFavoriteYn", groupViewList.get(position).getFavoriteYn());
					i.putExtra("groupActivateYn", groupViewList.get(position).getActivateYn());
					i.putExtra("groupRegisterDate", groupViewList.get(position).getRegisterDate());
					
					Log.i(TAG, "groupId           : " + groupViewList.get(position).getIdMyHistoryGroups());
					Log.i(TAG, "groupName         : " + groupViewList.get(position).getName());
					Log.i(TAG, "groupComment      : " + groupViewList.get(position).getComment());
					Log.i(TAG, "groupIconUrl      : " + groupViewList.get(position).getIconUrl());
					Log.i(TAG, "groupOpenGroupYn  : " + groupViewList.get(position).getOpenGroupYn());
					Log.i(TAG, "groupFavoriteYn   : " + groupViewList.get(position).getFavoriteYn());
					Log.i(TAG, "groupActivateYn   : " + groupViewList.get(position).getActivateYn());
					Log.i(TAG, "groupRegisterDate : " + groupViewList.get(position).getRegisterDate());
					
					startActivityForResult(i, 0);
				}
				
				
			}
		});
		
		gridView.setOnScrollListener(this);
		
		gridView.setAlwaysDrawnWithCacheEnabled(true);
		
		
		
		
		// DatabaseHandler 를 연다.
//		dbHandler = DatabaseHandler.open(getApplicationContext());
		
		
		/**
		 * 화면이 출력되면 Server 에 접속하지 않고 Database 의 Group 목록을 가져 온다.
		 */
		
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST_REFRESH));
		
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST));
		
//		DAYVE_EXECUTE_COUNT++;
		
		/**
		 * 설치 후 최초 실행시에만 server 접속 다이얼로그 창을 띄우고
		 * 모든 데이터를 한번에 내려 받는다.
		 * 
		 * 이후 실행시부터는 사용자가 Refresh 해야만 다시 내려 받는다.
		 */
		if(DAYVE_EXECUTE_COUNT == 1) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_FIRST_EXECUTE));
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST_REFRESH));
		} else {
//			mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST));
		}
	}
	
	/**
	 * SharedPreferences 정보를 확인 한다.
	 */
	public void confirmNotification() {
		String myPf = "kr.pe.johnkim.dayve.activity_preferences";
		SharedPreferences mSharedPreferences = getSharedPreferences(myPf, Activity.MODE_PRIVATE);
		
		// id 를 가져 온다.
		DAYVE_ID = mSharedPreferences.getString("dayve_id", "");
		// 한번에 가져올 목록의 갯수를 가져 온다.
		groupCount = Integer.parseInt(mSharedPreferences.getString("dayve_list_count", "20"));
		
		// 실행 횟수를 가져 온다.
		DAYVE_EXECUTE_COUNT = mSharedPreferences.getInt("dayve_execute_count", 0);

		// Application 실행 횟수를 증가 시킨다.
		DAYVE_EXECUTE_COUNT++;

		// 증가 시킨 실행 횟수를 설정 파일에 저장 한다.
		SharedPreferences.Editor editor = mSharedPreferences.edit();
		editor.putInt("dayve_execute_count", DAYVE_EXECUTE_COUNT);
		editor.commit();
	}
	
	/**
	 * Handler 를 정의한다.
	 * 모든 Thread 를 등록해 놓고 필요할때 호출한다.
	 */
	private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch(msg.what) {
			// 첫 실행을 위한 로직을 처리 한다.
			case THREAD_FIRST_EXECUTE : 
				showDialogFirstExecute();
				break;
			// 프로그레스 바를 출력 한다.
			case THREAD_PROGRESS_BAR_VISIBLE : 
				groupProgressBar.setVisibility(View.VISIBLE);
				txtViewGroupNotification.setVisibility(View.VISIBLE);
				break;
			// 프로그레스 바를 감춘다.
			case THREAD_PROGRESS_BAR_INVISIBLE : 
				groupProgressBar.setVisibility(View.INVISIBLE);
				txtViewGroupNotification.setVisibility(View.INVISIBLE);
				break;
			// Group 목록을 가져 와서 출력 한다.
			case THREAD_GROUP_LIST : 
				runOnUiThread(selectGroupList);
				break;
			// Group 목록을 업데이트 한다.
			case THREAD_GROUP_LIST_REFRESH : 
//				groupViewList.clear();
				dayveGroupAdapter.notifyDataSetChanged();
//				dbHandler.deleteDayveGroup();
				threadSelectGroupRefresh();
				break;
			// Group 목록을 더 가져 온다.
			case THREAD_GROUP_LIST_MORE : 
				runOnUiThread(selectGroupList);
				break;
			// Group 목록 가져오기에 성공하면 toast 를 띄운다.
			case THREAD_GROUP_LIST_SUCCESS : 
				break;
			// Group 목록 가져오기에 실패하면 dialog 창을 띄운다.
			case THREAD_GROUP_LIST_FAIL : 
				break;
			// Category 목록을 refresh 한다.
			case THREAD_CATEGORY_LIST_FOR_GROUP_REFRESH : 
				threadSelectCategoryForGroupRefresh();
				break;
			// Item 목록을 refresh 한다.
			case THREAD_ITEM_LIST_FOR_CATEGORY_REFRESH : 
				threadSelectItemForCategoryRefresh();
				break;
			// Item Event 목록을 refresh 한다.
			case THREAD_ITEM_EVENT_LIST_REFRESH : 
				threadSelectItemEventRefresh();
				break;
			// Favorite 목록을 refresh 한다.
			case THREAD_FAVORITE_LIST_FOR_GROUP_REFRESH : 
				threadSelectFavoriteForGroupRefresh();
				break;
			// Refresh 버튼을 출력 한다.
			case THREAD_REFRESH_BUTTON_APPEAR : 
				imgViewGroupRefresh.setVisibility(View.VISIBLE);
				break;
			// Refresh 버튼을 감춘다.
			case THREAD_REFRESH_BUTTON_DISAPPEAR : 
				imgViewGroupRefresh.setVisibility(View.INVISIBLE);
				break;
			}
		}
	};

	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		// TODO Auto-generated method stub
		
	}

	public void onScrollStateChanged(AbsListView view, int scrollState) {
		// TODO Auto-generated method stub
		
	}
	
	/**
	 * 뒤로 가기 버튼을 터치하면 프로그램 종료 여부를 확인 한다.
	 */
	@Override
	protected Dialog onCreateDialog(int id) {

		AlertDialog dlg;

		switch (id) {
		case ALERT_DIALOG_EXIT_ID:
			dlg = new AlertDialog.Builder(this).setIcon(R.drawable.icon)
			.setTitle("프로그램 종료").setMessage("\n" + "DAYVE 를 종료하시겠습니까?" + "\n")
			.setNegativeButton("취소", new DialogInterface.OnClickListener() {

				//                                @Override
				public void onClick(DialogInterface dialog, int which) {

				}
			}).setPositiveButton("확인", new DialogInterface.OnClickListener() {

				//                                @Override
				public void onClick(DialogInterface dialog, int which) {
					// 아래의 모든 activity 를 닫는 종료 코드가 작동하지 않는다??
					ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
					am.restartPackage(getPackageName());

					// 다시 예전 방식으로 사용.
					System.exit(0);
				}
			}).show();

			break;

		default:
			break;
		}

		return super.onCreateDialog(id);

	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onResume()
	 */
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		
//		if(dbHandler == null || !dbHandler.getSQLiteDatabase().isOpen()){ 
//			dbHandler = DatabaseHandler.open(getApplicationContext());
//		}
		
//		DAYVE_EXECUTE_COUNT++;

		/**
		 * 실행상태가 아니고 최초 설치 상태가 아닐때만 목록을 출력 한다.
		 */
		if(("").equals(GROUP_MODE) && DAYVE_EXECUTE_COUNT > 1) {
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST));
		} else {
			groupViewList.clear();
		}
		
		
		// main thread 에서 child thread 를 호출 한다.
		Thread thread = new Thread(null, doBackgroundThreadProcessing, "Background_insertLog");
		thread.start();
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onStop()
	 */
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		
		Log.i(TAG, "onStop");
		
//		DAYVE_EXECUTE_COUNT++;
		
//		dbHandler.close();
		
//		finish();
		
//		groupDatabaseHaneler.close();
		
//		finish();
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		
//		dbHandler.close();
	}

	/* 뒤로 가기 버튼을 정의 한다.
	 * 
	 * @see android.app.Activity#onBackPressed()
	 */
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
		showDialog(ALERT_DIALOG_EXIT_ID);
//		super.onBackPressed();
	}
	
	/* 최상위 프로세스가 아닐 경우 프로세스를 종료 한다.
	 * 
	 * => Home Key 를 눌렀을때 프로세스를 종료 한다.
	 * 
	 * @see android.app.Activity#onPause()
	 */
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		
		if(!isForegrdound()) {
			System.exit(0);
		}
	}
	
	/**
	 * 현재 프로세스가 최상위로 실행중인지 검사 한다.
	 * 
	 * true : 최상위
	 * 
	 * @return
	 */
	public boolean isForegrdound() {
	    ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
	    List<RunningTaskInfo> list = am.getRunningTasks(1);
	    ComponentName cn = list.get(0).topActivity;
	    String name = cn.getPackageName();
	     
	    return name.indexOf(getPackageName()) > -1;
	}

	/* Group 을 수정했으면 화면이 다시 열리면서 refresh 를 한다.
	 * 
	 * Group 이 삭제 되었으면 화면이 열리면서 Category, Item 도 같이 refresh 한다.
	 * 
	 * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		
//		if(dbHandler == null || !dbHandler.getSQLiteDatabase().isOpen()){ 
//			dbHandler = DatabaseHandler.open(getApplicationContext());
//		}
		
//		if(("SUCCESS").equals(RESULT_GROUP_REGISTER)) {
//			
//			GROUP_MODE = "PROGESS";
//			mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST_REFRESH));
//		}
//		
//		if(("SUCCESS").equals(RESULT_GROUP_DELETE)) {
//			Log.i(TAG, "Category, Item 도 같이 refresh 한다.");
//			// Category, Item 도 같이 refresh 한다.
////			selectCategoryRefresh();
////			selectItemRefresh();
//			
//			GROUP_MODE = "PROGESS";
//			
//			mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST_REFRESH));
////			mHandler.sendMessage(mHandler.obtainMessage(THREAD_CATEGORY_LIST_FOR_GROUP_REFRESH));
////			mHandler.sendMessage(mHandler.obtainMessage(THREAD_ITEM_LIST_FOR_CATEGORY_REFRESH));
////			mHandler.sendMessage(mHandler.obtainMessage(THREAD_FAVORITE_LIST_FOR_GROUP_REFRESH));
//		}
		
		if(requestCode == 0) {
			if(resultCode == RESULT_OK) {
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST_REFRESH));
				
				/**
				 * 만약 group 삭제일 경우 category, item 도 refresh 한다.
				 * 
				 * 각 View 가 출력하면서 확인하기 때문에 모두 주석 처리 함.
				 */
				if(("SUCCESS").equals(RESULT_GROUP_DELETE)) {
					Log.e(TAG, "delete a group.");
//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_CATEGORY_LIST_FOR_GROUP_REFRESH));
//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_ITEM_LIST_FOR_CATEGORY_REFRESH));
//					mHandler.sendMessage(mHandler.obtainMessage(THREAD_FAVORITE_LIST_FOR_GROUP_REFRESH));
				}
			}
		}
		
		// Group 등록 결과 값을 초기화 한다.
		RESULT_GROUP_REGISTER = "";
		RESULT_GROUP_DELETE = "";
	}
	
	/**
	 * Group 의 Category 목록을 refresh 한다.
	 */
	private void threadSelectCategoryForGroupRefresh() {
		Log.i(TAG, "threadSelectCategoryForGroupRefresh");
		
		// 프로그레스 바를 출력 한다.
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));

		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				selectCategoryRefresh();
			}
			
		});
		
		thread.start();
	}
	
	/**
	 * Group 의 Category 의 Item 목록을 refresh 한다.
	 */
	private void threadSelectItemForCategoryRefresh() {
		Log.i(TAG, "threadSelectItemForCategoryRefresh");
		
		// 프로그레스 바를 출력 한다.
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));

		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				selectItemRefresh();
			}
			
		});
		
		thread.start();
	}
	
	/**
	 * Item Event 목록을 refresh 한다.
	 */
	private void threadSelectItemEventRefresh() {
		Log.i(TAG, "threadSelectItemForCategoryRefresh");
		
		// 프로그레스 바를 출력 한다.
//		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));

		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				selectItemEventRefresh();
			}
			
		});
		
		thread.start();
	}
	
	/**
	 * Group 의 Favorite 목록을 refresh 한다.
	 */
	private void threadSelectFavoriteForGroupRefresh() {
		Log.i(TAG, "threadSelectFavoriteForGroupRefresh");
		
		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				selectFavoriteRefresh();
			}
			
		});
		
		thread.start();
	}

	/**
	 * server 에서 Group 목록을 다시 가져 온다.
	 * 
	 * 실제 체크는 login 메소드에서 처리한다.
	 * 쓰레드로 돌리기 위한 임시 메소드 이다.
	 * 
	 * 만약, 설치 후 최초 실행이면 Server 에서 Category, Item 목록도 같이 내려 받는다.
	 */
	private void threadSelectGroupRefresh() {
		Log.i(TAG, "threadSelectGroupRefresh");
		
		// 프로그레스 바를 출력 한다.
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));
		
		// 가져온 Group 목록을 담을 리스트를 생성 한다.
		groupList = new ArrayList<DayveGroup>();
		
		Thread thread = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				selectGroupRefresh();
				
				/**
				 * 만약 설치 후 최초 실행이면 Group, Category, Item, Item event, Favorite 도 
				 * 같이 내려 받는다.
				 */
				if(DAYVE_EXECUTE_COUNT == 1) {
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_CATEGORY_LIST_FOR_GROUP_REFRESH));
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_FAVORITE_LIST_FOR_GROUP_REFRESH));
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_ITEM_EVENT_LIST_REFRESH));
					mHandler.sendMessage(mHandler.obtainMessage(THREAD_ITEM_LIST_FOR_CATEGORY_REFRESH));
				}
			}
		});
		
		thread.start();
	}
	
	/**
	 * (첫 설치시에) Server 에서 Group 목록을 가져 와서 local database 에 저장 한다.
	 */
	private void selectGroupRefresh() {
		Log.i(TAG, "selectGroupRefresh");
		
		/**
		 * 실행중 모드로 정의 한다.
		 */
		GROUP_MODE = "PROCESS";
		
		/**
		 * Refresh 버튼을 감춘다.
		 */
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_REFRESH_BUTTON_DISAPPEAR));
		
		/**
		 * Database 를 open 한다.
		 */
		groupDatabaseHaneler = DayveGroupDatabaseHandler.open(getApplicationContext());
		
		// 기존의 화면 목록을 삭제 한다.
		groupDatabaseHaneler.deleteDayveGroup();
//		groupDatabaseHaneler.close();
		
		DayveGroup parameterGroup = new DayveGroup();
		
		parameterGroup.setActivateYn("Y");
		parameterGroup.setMyHistoryMembersId(DAYVE_ID);
//		parameterGroup.setGroupStart(groupStart);
//		parameterGroup.setGroupCount(groupCount);
		
//		groupDatabaseHaneler = DayveGroupDatabaseHandler.open(getApplicationContext());
		
		groupDatabaseHaneler.beginTransaction();
		
		try {
			groupList = dayveGroupRest.selectGroupList(parameterGroup);
			
			Log.i(TAG, "groupList.size : " + groupList.size());
			
			for(int i=0 ; i<groupList.size() ; i++) {
				ContentValues values = new ContentValues();
				
				values.put("id_myhistory_groups", groupList.get(i).getIdMyHistoryGroups());
				values.put("name", groupList.get(i).getName());
				values.put("comment", groupList.get(i).getComment());
				values.put("icon_url", groupList.get(i).getIconUrl());
				values.put("open_group_yn", groupList.get(i).getOpenGroupYn());
				values.put("favorite_yn", groupList.get(i).getFavoriteYn());
				values.put("activate_yn", groupList.get(i).getActivateYn());
				values.put("modify_date", groupList.get(i).getModifyDate());
				values.put("register_date", groupList.get(i).getRegisterDate());
				values.put("myhistory_members_id", groupList.get(i).getMyHistoryMembersId());
				
				groupDatabaseHaneler.insertDayveGroup(values);
			}
			
			groupDatabaseHaneler.setTransactionSuccessful();
			
			Log.i(TAG, "Success to select group list from server.");
			
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			groupDatabaseHaneler.endTransaction();
		}
		
		/**
		 * Refresh 가 종료되면 버튼을 출력 한다.
		 */
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_REFRESH_BUTTON_APPEAR));
		
		/**
		 * Database 를 close 한다.
		 */
		if(groupDatabaseHaneler != null) {
			groupDatabaseHaneler.close();
		}
		
		/**
		 * 최초 다운로드가 완료되면 파라메터를 세팅 한다.
		 */
		DOWNLOAD_GROUP_INITIAL_DATA = "SUCCESS";
		
		/**
		 * 실행이 끝났음을 정의 한다.
		 */
		GROUP_MODE = "";
		
		/**
		 * 출력하기 직전 기존의 화면 목록을 지운다.
		 */
		groupViewList.clear();
		
		// 화면에 출력 한다.
		mHandler.sendMessage(mHandler.obtainMessage(THREAD_GROUP_LIST));
	}
	
	/**
	 * 첫 설치시에 Server 에서 Category 목록을 가져 와서 local database 에 저장 한다.
	 */
	private void selectCategoryRefresh() {
		Log.i(TAG, "selectCategoryRefresh");
		
		/**
		 * Database 를 open 한다.
		 */
		categoryDatabaseHandler = DayveCategoryDatabaseHandler.open(getApplicationContext());
		
		// 먼저 기존의 data 를 삭제 한다.
		categoryDatabaseHandler.deleteDayveCategory();
		
		ArrayList<DayveCategory> categoryList = new ArrayList<DayveCategory>();
		
		DayveCategory parameterCategory = new DayveCategory();
		
		parameterCategory.setActivateYn("Y");
		parameterCategory.setCategoryStart(0);
		parameterCategory.setCategoryCount(1000000);		// 한번에 모두 가져오기 위해서 10000000.
		parameterCategory.setMyHistoryMembersId(DAYVE_ID);
		
		categoryDatabaseHandler.beginTransaction();
		
		try {
			categoryList = dayveCategoryRest.selectCategoryList(parameterCategory);
			
			Log.e(TAG, "categoryList size : " + categoryList.size());
			
			for(int i=0 ; i<categoryList.size() ; i++) {
				ContentValues values = new ContentValues();
				
				values.put("id_myhistory_categories", categoryList.get(i).getIdMyHistoryCategories());
				values.put("name", categoryList.get(i).getName());
				values.put("comment", categoryList.get(i).getComment());
				values.put("open_category_yn", categoryList.get(i).getOpenCategoryYn());
				values.put("favorite_yn", categoryList.get(i).getFavoriteYn());
				values.put("activate_yn", categoryList.get(i).getActivateYn());
				values.put("modify_date", categoryList.get(i).getModifyDate());
				values.put("register_date", categoryList.get(i).getRegisterDate());
				values.put("myhistory_members_id", categoryList.get(i).getMyHistoryMembersId());
				values.put("items_count", categoryList.get(i).getItemsCount());

				categoryDatabaseHandler.insertDayveCategory(values);
			}
			
			categoryDatabaseHandler.setTransactionSuccessful();
			
			Log.i(TAG, "Success to select category list.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			categoryDatabaseHandler.endTransaction();
		}
		
		/**
		 * Database 를 close 한다.
		 */
		if(categoryDatabaseHandler != null) {
			categoryDatabaseHandler.close();
		}
		
		/**
		 * 최초 다운로드가 완료되면 파라메터를 세팅 한다.
		 */
		DOWNLOAD_CATEGORY_INITIAL_DATA = "SUCCESS";
	}
	
	/**
	 * 첫 설치시에 Server 에서 Item 목록을 가져 와서 local database 에 저장 한다.
	 */
	private void selectItemRefresh() {
		Log.i(TAG, "selectItemRefresh");
		
		/**
		 * Database 를 open 한다.
		 */
		itemDatabaseHandler = DayveItemDatabaseHandler.open(getApplicationContext());
		
		// 먼저 기존의 data 를 삭제 한다.
		itemDatabaseHandler.deleteDayveItem();
		
		ArrayList<DayveItem> itemList = new ArrayList<DayveItem>();
		
		DayveItem parameterItem = new DayveItem();
		
		parameterItem.setActivateYn("Y");
		parameterItem.setMyHistoryMembersId(DAYVE_ID);
		parameterItem.setItemStart(0);
		parameterItem.setItemCount(1000000);			// 한번에 모두 가져 오기 위해서 10000000.
		
		itemDatabaseHandler.beginTransaction();
		
		try {
			itemList = dayveItemRest.selectItemList(parameterItem);
			
			Log.i(TAG, "itemList.size() : " + itemList.size());
			
			for(int i=0 ; i<itemList.size() ; i++) {
				ContentValues values = new ContentValues();
				
				values.put("id_myhistory_items", itemList.get(i).getIdMyHistoryItems());
				values.put("name", itemList.get(i).getName());
				values.put("comment", itemList.get(i).getComment());
				values.put("amount", itemList.get(i).getAmount());
				values.put("open_item_yn", itemList.get(i).getOpenItemYn());
				values.put("favorite_yn", itemList.get(i).getFavoriteYn());
				values.put("activate_yn", itemList.get(i).getActivateYn());
				values.put("modify_date", itemList.get(i).getModifyDate());
				values.put("register_date", itemList.get(i).getRegisterDate());
				values.put("myhistory_members_id", itemList.get(i).getMyHistoryMembersId());
				values.put("myhistory_categories_id_myhistory_categories", itemList.get(i).getMyHistoryCategoriesIdMyHistoryCategories());
				
				itemDatabaseHandler.insertDayveItem(values);
			}
			
			itemDatabaseHandler.setTransactionSuccessful();
			
			/**
			 * 데이터양이 제일 많은 item 다운로드가 완료되면 
			 * 설치 파라메터와 실행 파라메터 카운터의 값을 재정의 한다.
			 */
//			INSTALL_STATUS = "SUCCESS";
			DAYVE_EXECUTE_COUNT++;
			
			Log.i(TAG, "Success to select item list.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			itemDatabaseHandler.endTransaction();
		}
		
		/**
		 * Database 를 close 한다.
		 */
		if(itemDatabaseHandler != null) {
			itemDatabaseHandler.close();
		}
		
		/**
		 * 최초 다운로드가 완료되면 파라메터를 세팅 한다.
		 */
		DOWNLOAD_ITEM_INITIAL_DATA = "SUCCESS";
	}
	
	/**
	 * 첫 설치시에 Server 에서 Item Event 목록을 가져 와서 local database 에 저장 한다.
	 */
	private void selectItemEventRefresh() {
		Log.i(TAG, "selectItemEventRefresh");
		
		/**
		 * Database 를 open 한다.
		 */
		itemEventDatabaseHandler = DayveItemEventDatabaseHandler.open(getApplicationContext());
		
		// 먼저 기존의 data 를 삭제 한다.
		itemEventDatabaseHandler.deleteDayveItemEvent();
		
		ArrayList<DayveItemEvent> itemEventList = new ArrayList<DayveItemEvent>();
		
		DayveItemEvent parameterItemEvent = new DayveItemEvent();
		
		parameterItemEvent.setActivateYn("Y");
		parameterItemEvent.setMyHistoryMembersId(DAYVE_ID);
//		parameterItemEvent.setItemStart(0);
//		parameterItemEvent.setItemCount(1000000);			// 한번에 모두 가져 오기 위해서 10000000.
		
		itemEventDatabaseHandler.beginTransaction();
		
		try {
			itemEventList = dayveItemEventRest.selectItemEventList(parameterItemEvent);
			
			Log.i(TAG, "itemList.size() : " + itemEventList.size());
			
			for(int i=0 ; i<itemEventList.size() ; i++) {
				ContentValues values = new ContentValues();
				
				values.put("id_myhistory_item_events", itemEventList.get(i).getIdMyHistoryItemEvents());
				values.put("comment", itemEventList.get(i).getComment());
				values.put("amount", itemEventList.get(i).getAmount());
				values.put("open_item_event_yn", itemEventList.get(i).getOpenItemEventYn());
				values.put("favorite_yn", itemEventList.get(i).getFavoriteYn());
				values.put("activate_yn", itemEventList.get(i).getActivateYn());
				values.put("modify_date", itemEventList.get(i).getModifyDate());
				values.put("register_date", itemEventList.get(i).getRegisterDate());
				values.put("myhistory_members_id", itemEventList.get(i).getMyHistoryMembersId());
				values.put("myhistory_items_id_myhistory_items", itemEventList.get(i).getMyHistoryItemsIdMyHistoryItems());
				
				itemEventDatabaseHandler.insertDayveItemEvent(values);
			}
			
			itemEventDatabaseHandler.setTransactionSuccessful();
			
			/**
			 * 데이터양이 제일 많은 item 다운로드가 완료되면 
			 * 설치 파라메터와 실행 파라메터 카운터의 값을 재정의 한다.
			 */
			INSTALL_STATUS = "SUCCESS";
//			DAYVE_EXECUTE_COUNT++;
			
			Log.i(TAG, "Success to select item event list.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			itemEventDatabaseHandler.endTransaction();
		}
		
		/**
		 * Database 를 close 한다.
		 */
		if(itemEventDatabaseHandler != null) {
			itemEventDatabaseHandler.close();
		}
		
		/**
		 * 최초 다운로드가 완료되면 파라메터를 세팅한다.
		 */
		DOWNLOAD_ITEM_EVENT_INITIAL_DATA = "SUCCESS";
	}
	
	/**
	 * 첫 설치시에 Server 에서 Category 목록을 가져 와서 local database 에 저장 한다.
	 */
	private void selectFavoriteRefresh() {
		Log.i(TAG, "selectFavoriteRefresh");
		
		/**
		 * Database 를 open 한다.
		 */
		favoriteDatabaseHandler = DayveFavoriteDatabaseHandler.open(getApplicationContext());
		
		// 먼저 기존의 data 를 삭제 한다.
		favoriteDatabaseHandler.deleteDayveCategory();
		
		ArrayList<DayveCategory> categoryList = new ArrayList<DayveCategory>();
		
		DayveCategory parameterCategory = new DayveCategory();
		
		parameterCategory.setActivateYn("Y");
		parameterCategory.setCategoryStart(0);
		parameterCategory.setCategoryCount(1000000);		// 한번에 모두 가져오기 위해서 10000000.
		parameterCategory.setMyHistoryMembersId(DAYVE_ID);
		
		favoriteDatabaseHandler.beginTransaction();
		
		try {
			categoryList = dayveCategoryRest.selectCategoryList(parameterCategory);
			
			Log.e(TAG, "favoriteList size : " + categoryList.size());
			
			for(int i=0 ; i<categoryList.size() ; i++) {
				ContentValues values = new ContentValues();
				
				values.put("id_myhistory_categories", categoryList.get(i).getIdMyHistoryCategories());
				values.put("name", categoryList.get(i).getName());
				values.put("comment", categoryList.get(i).getComment());
				values.put("open_category_yn", categoryList.get(i).getOpenCategoryYn());
				values.put("favorite_yn", categoryList.get(i).getFavoriteYn());
				values.put("activate_yn", categoryList.get(i).getActivateYn());
				values.put("modify_date", categoryList.get(i).getModifyDate());
				values.put("register_date", categoryList.get(i).getRegisterDate());
				values.put("myhistory_members_id", categoryList.get(i).getMyHistoryMembersId());
				values.put("items_count", categoryList.get(i).getItemsCount());

				favoriteDatabaseHandler.insertDayveCategory(values);
			}
			
			favoriteDatabaseHandler.setTransactionSuccessful();
			
			Log.i(TAG, "Success to select category list.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			favoriteDatabaseHandler.endTransaction();
		}
		
		/**
		 * Database 를 close 한다.
		 */
		if(favoriteDatabaseHandler != null) {
			favoriteDatabaseHandler.close();
		}
		
		/**
		 * 최초 다운로드가 완료되면 파라메터를 세팅 한다.
		 */
		DOWNLOAD_FAVORITE_INITIAL_DATA = "SUCCESS";
	}
	
	/**
	 * Group 은 스크롤 이벤트가 없다. 페이징 처리를 하지 않는다.
	 */
	private Runnable selectGroupList = new Runnable() {

		public void run() {
			// TODO Auto-generated method stub
			Log.i(TAG, "selectGroupList");
			
			if(!groupProgressBar.isShown()) {
				mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_VISIBLE));
			}
			
			String _id = "0";
			
			int listSize = groupViewList.size();
			
			if(listSize > 0 ) {
				_id = groupViewList.get(listSize-1).get_id();
			}
			
			/**
			 * Database 를 open 한다.
			 */
			groupDatabaseHaneler = DayveGroupDatabaseHandler.open(getApplicationContext());
			
//			ArrayList<DayveGroup> resultList = groupDatabaseHaneler.selectGroupList(_id, "" + groupCount);
			ArrayList<DayveGroup> resultList = groupDatabaseHaneler.selectGroupList(_id, "" + 1000000);
			
			groupDatabaseHaneler.close();
			
			groupViewList.addAll(resultList);
			
			if(resultList.size() < groupCount || 1000 < groupViewList.size()) {
				mLockListView = true;
			} else {
				mLockListView = false;
			}
			
			Log.e(TAG, "groupViewList : " + groupViewList.size());
			
			// 만약 리스트가 없으면(등록된 카테고리가 없으면) toast 를 띄운다.
			if(groupViewList.size() < 1) {
				showNoListToast();
			}
			
			dayveGroupAdapter.notifyDataSetChanged();
			
			// 프로그레스 바를 감춘다.
			mHandler.sendMessage(mHandler.obtainMessage(THREAD_PROGRESS_BAR_INVISIBLE));
		}
		
	};
	
	/**
	 * 출력할 목록이 없다는 Toast 를 띄운다.
	 */
	private void showNoListToast() {
		CharSequence text = "리스트가 없습니다";
		Toast toast = Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
	
	/**
	 * 설치 후 첫 실행임을 알리는 다이얼로그를 띄운다.
	 */
	private void showDialogFirstExecute() {
		Log.e(TAG, "showDialogFirstExecute");
		
//		new AlertDialog.Builder(DayveGroupView.this)
//		.setMessage("환영합니다!" + "\n\n" + "서버로 부터 DAYVE 초기 데이터를 다운로드 받고 있습니다. 설치 후 최초 한번만 실행됩니다." + "\n\n" + "잠시만 기다려 주세요.")
//		.setPositiveButton("확인", 
//			new DialogInterface.OnClickListener() {
//				
////				@Override
//				public void onClick(DialogInterface dialog, int which) {
//					// TODO Auto-generated method stub
//				}
//			}).show();
		
		
		Intent i = new Intent(DayveGroupView.this, DayveInstallNotificationView.class);
		startActivity(i);
	}

	
	
	/* (non-Javadoc)
	 * @see android.app.Activity#onWindowFocusChanged(boolean)
	 */
	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		// TODO Auto-generated method stub
		super.onWindowFocusChanged(hasFocus);
		
//		finish();
	}

	/**
	 * 로그를 저장 한다.
	 */
	private void insertLog() {
		Log.i(TAG, "insertLog");
		
		DayveLog dayveLog = new DayveLog();
		
		dayveLog.setId(DAYVE_ID);
		dayveLog.setViewName(TAG);
		dayveLog.setAccessDate(currentDate);
		
		try {
			dayveCommonRest.registerLog(dayveLog);
			Log.i(TAG, "Success to insert log.");
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, "Fail to insert log.");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Log.e(TAG, "Fail to insert log.");
		}
	}
	
	/**
	 * 로그 저장은 UI 와 관계 없기 때문에 background thread 로 구현 함 : child thread
	 */
	private Runnable doBackgroundThreadProcessing = new Runnable() {
		
		public void run() {
			// TODO Auto-generated method stub
			insertLog();
		}
	};
	
	
	private void showGridToast(int position) {
		
		CharSequence text = "리스트가 없습니다.";
		Toast toast = Toast.makeText(getApplicationContext(), "name : " + groupViewList.get(position).getName(), Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
		toast.show();
	}
}
